//通过它前端向后端发请求,就不需要用postman了
import axios from "axios";
import { ElMessage } from "element-plus";

const request = axios.create({
    baseURL: 'http://localhost:8080',
    timeout: 30000 // 后台接口超时时间
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
request.interceptors.request.use(config => {
    // 从 localStorage 获取用户信息
    const user = localStorage.getItem('xm-pro-user')
    if (user) {
        try {
            // 将用户信息进行 Base64 编码
            const encodedUser = btoa(encodeURIComponent(user))
            config.headers['user'] = encodedUser
        } catch (error) {
            console.error('编码用户信息失败:', error)
        }
    }
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    return config
}, error => {
    return Promise.reject(error)
});
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        // 兼容服务端返回的字符串数据
        if (typeof res ==='string') {
            res = res? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        if (error.response) {
            if (error.response.status === 404) {
                ElMessage.error('未找到请求接口')
            } else if (error.response.status === 500) {
                ElMessage.error('系统异常，请查看后端控制台报错')
            } else {
                console.error('网络错误链接', error.message)
            }
        } else {
            // 处理网络错误等没有 response 的情况
            console.error('请求失败:', error.message)
            ElMessage.error('网络连接失败，请检查网络设置')
        }
        // 返回一个带有错误信息的对象，确保后续的 then 能收到数据
        return Promise.reject({
            code: '500',
            msg: error.response?.data?.msg || '请求失败，请稍后重试'
        })
    }
)

export default request